package org.xqp.basic.controller;


import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.xqp.basic.util.FastDfsUtil;
import org.xqp.basic.util.JsonResult;

@RestController
@RequestMapping("/fastDfs")
public class FastDfsController {
    /**
     * 这是一个上传接口
     *
     * MultipartFile 上传文件就用这个类来传文件
     * @RequestPart 这个标签映射文件
     * required true 必须上传文件fouze就报错
     * value = "file"将前端传过来得文件封装到file中
     *
     */
    @PostMapping
    public JsonResult upload(@RequestPart(required = true, value = "file" )MultipartFile file){
        try {
            // 获取上传的图片的后缀
            String filename = file.getOriginalFilename(); // 获取文件上传时的名字
            int lastIndexOf = filename.lastIndexOf(".");// 返回.最后一次出现的索引
            String substring = filename.substring(lastIndexOf + 1); // 我们将.的索引加上1就获取到了后缀的索引然后从这个索引开始截取后面的全部字符串
            // 调用我们写的工具类上传文件
            String path = FastDfsUtil.upload(file.getBytes(), substring);//getBytes()将一个string类型的字符串中包含的字符转换成byte类型并且存入一个byte数组中
            return JsonResult.me().setResultObj(path); // 将文件路径返回给页面方便存入数据库
        } catch (Exception e) {
            e.printStackTrace();
            return JsonResult.me().setMsg("上传失败");
        }
    }

    /**
     * 这是一个删除接口
     */
    @DeleteMapping
    public JsonResult delete(@RequestParam String path){ // 通过路径删除文件所以要传一个文件路径过来

        try {
            // 传过来的path是/group/xxx/xxxx 我们要获取到组名先要把第一个/给弄掉
            String substring = path.substring(1); // 获取到没有第一个/的字符串
            int i = substring.indexOf("/"); // 在获取到第一个/的索引  这个索引以前就是组名  这个索引以后就是文件名
            String name = substring.substring(0, i); // 从索引0开始截取到索引i  记得截取是含头不含尾
            String file = substring.substring(i + 1); // 从索引i的下一个索引开始截取到最后
            FastDfsUtil.delete(name, file); // 删除文件需要的两个参数一个是文件名一个是组名
            return JsonResult.me();
        } catch (Exception e) {
            e.printStackTrace();
            return JsonResult.me().setMsg("删除失败");
        }
    }
}
